Skip to content

Zmk v0.3.0 - #3

Merged
reversebias merged 3 commits into
masterfrom
zmk-v0.3.0
Aug 9, 2026
Merged

Zmk v0.3.0#3
reversebias merged 3 commits into
masterfrom
zmk-v0.3.0

Conversation

@reversebias

Copy link
Copy Markdown
Owner

No description provided.

reversebias and others added 3 commits August 9, 2026 16:35
CURRENT.UF2 readbacks from both halves, captured 2026-08-09 before
flashing the v0.3.0 migration. These are the exact bytes both halves
ran since 2022-03 (zmk f1b5dc4 era), including the NVS storage region.

Verified: all 3728 blocks valid, contiguous 0x1000..0xEA000, sane
vector tables. Family ID 0x239A0029 (board-specific) is accepted by
the write path of bootloader 0.6.2 alongside 0xADA52840.

Restore: double-tap reset, drag the matching half's file.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Last touched 2022-03 against zmk main (Zephyr 2.5, LVGL 7.6.1); this
brings both board definitions to the v0.3.0 release. Both halves build
clean in zmk-build-arm:stable (left 33.7% flash / 24.8% RAM, right
28.6% / 18.2%). Full excavation and rationale: zmk-portability-report.md.

Build system:
- Pin west.yml to v0.3.0; add build.yaml + CI via shared workflow
- Native CONFIG_BUILD_OUTPUT_UF2 replaces the uf2conv.py post-build hook

Devicetree:
- SPI pins to pinctrl (sck/mosi-pin removed in Zephyr 3.0); MISO freed
- zephyr,display chosen node (panel no longer found by device name)
- wakeup-source on kscan; deprecated label properties dropped

Kconfig:
- LVGL_* -> LV_*/LV_Z_* namespace; UNSCII-8 pinned as default + theme
  small font (resolution now comes from DT width/height)
- board.c deleted: VDDH DC/DC now via BOARD_ENABLE_DCDC_HV=y; broken
  BOARD_ENABLE_DCDC dependency fixed but kept off (deliberate, see report)
- BT_MAX_CONN/BT_PERIPHERAL_PREF_* dropped: role-aware defaults give
  6/12/30/400 - same interval as the old hand-tune plus slave latency 30
- ZMK_USB central-only per upstream; right keeps bare USB stack so the
  CHG indicator still works
- Display stack 2048->4096, LV_Z_MEM_POOL_SIZE=8192 (crash hypothesis)
- RC oscillator and 2/10 debounce preserved with rationale comments

Widgets (LVGL 7 -> 8):
- battery: zmk_battery_state_of_charge() replaces bt_bas polling
- output: endpoint-instance API on central (profile nicknames kept);
  new peripheral branch on zmk_split_bt_peripheral_is_connected() -
  v0.3.0 no longer compiles endpoint/profile APIs on peripherals
- layer: zmk_keymap_layer_name() + index-to-id hop; keymap layers
  renamed label -> display-name
- WPM widget retired (unused)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Three issues from the first on-hardware test of the v0.3.0 migration,
all display-only (matrix/BLE/combos/layers verified working):

- ZMK_DISPLAY_INVERT=y on both halves: LVGL 8's mono theme defaults to
  the light variant, LVGL 7 defaulted dark - restores white-on-black.

- Layer label row 41 -> 39: lv_font_unscii_8 declares line_height 9 in
  LVGL 8 (was 8 in LVGL 7), so 41+9 overran the 48-row panel.

- SSD1306 width 96 -> 128 (full controller RAM): the glass shows a
  64-column window whose edge includes ~4 RAM columns a 96-wide
  framebuffer never writes. Their power-on garbage was invisible for
  four years under the dark theme (unwritten = off = black-on-black)
  and surfaced as a lit 4px bar after the theme migration. Rendering
  all 128 columns keeps every reachable column painted; content
  position on glass is unchanged (widgets stay anchored at x=32).

Both halves rebuilt and verified on hardware.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@reversebias
reversebias merged commit b93a3f7 into master Aug 9, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant